package com.mdb.open.trade.service.trade.handle.dto;

import com.mdb.bc.api.data.DataObjectBase;
import com.mdb.open.trade.service.trade.handle.enums.LoanHolidayApproveTypeEnum;
import com.mdb.open.trade.service.trade.handle.enums.LoanHolidayProcessTypeEnum;
import com.mdb.open.trade.service.trade.handle.enums.LoanRepayOrderEnum;
import com.mdb.open.trade.service.trade.handle.enums.OverdueRateTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @description:
 * @author: you.yichao
 * @create: 2019-08-13 21:29
 **/
@Data
public class LoanCommitDto extends DataObjectBase {

    @NotBlank
    @ApiModelProperty(value = "贷款账户")
    private String accountNo;

    @NotBlank
    @ApiModelProperty(value = "贷款客户")
    private String ciNo;

    @NotBlank
    @ApiModelProperty(value = "贷款产品")
    private String prodCd;

    @NotBlank
    @ApiModelProperty(value = "贷款客户额度")
    private String lmtNo;

    @NotBlank
    @ApiModelProperty(value = "贷款货币")
    private String ccy;

    @NotBlank
    @ApiModelProperty(value = "贷款本金")
    private String principal;

    @NotBlank
    @ApiModelProperty(value = "贷款生效日,yyyyMMdd")
    private String valDt;

    @NotBlank
    @ApiModelProperty(value = "贷款到期日,yyyyMMdd")
    private String endDt;

    @NotNull
    @ApiModelProperty(value = "贷款假期允许标志,默认N")
    private LoanHolidayApproveTypeEnum hdOrd;

    @NotNull
    @ApiModelProperty(value = "贷款假期处理方式,默认F")
    private LoanHolidayProcessTypeEnum hdMth;

    @NotBlank
    @ApiModelProperty(value = "贷款资金投放地区")
    private String useCntyLoc;

    @ApiModelProperty(value = "中小企业贷款细类")
    private String smeType;

    @NotBlank
    @ApiModelProperty(value = "金管局贷款用途分类,\"01\",\"CREDIT TO PRIVATE CONSTRUCTION\"；\"02\",\"CREDIT TO PUBLIC WORKS\"；\"03\",\"CREDIT TO PROPERTY INVESTORS\"；\"04\",\"PERSONAL HOUSING LOAN\"；\"05\",\"CREDIT TO INDUSTRIAL INVESTMENT\"；\"06\",\"CREDIT TO COMMERCIAL INVESTMENT\"；\"07\",\"OTHERS\"\n")
    private String amcmPurposes;

    @ApiModelProperty(value = "AMCM按揭指引例外选项")
    private String amcmExcepFlg;

    @NotBlank
    @ApiModelProperty(value = "利率浮动类型,默认1,\"1\",\"FIXED & FlOATING NOT SCHDULE\"；\"2\",\"DAILY FLOATING\"；\"3\",\"FLOAT BY SCHEDULE\"；\"4\",\"FLOAT BY PERIOD\"\n")
    private String rateFlg;

    @ApiModelProperty(value = "利率首次浮动日期,当利率浮动类型选4时必输，否则不允许输入")
    private String fstFlDt;

    @ApiModelProperty(value = "利率浮动周期单位,当利率浮动类型选4时必输，否则不允许输入")
    private String floatUt;

    @ApiModelProperty(value = "利率浮动周期,当利率浮动类型选4时必输，否则不允许输入")
    private String fltPerd;

    @ApiModelProperty(value = "参考利率类型,当利率浮动类型选1时非必输")
    private String intRateCode1;

    @ApiModelProperty(value = "参考利率档期,当利率浮动类型选1时非必输")
    private String intTerm1;

    @ApiModelProperty(value = "浮动利率,不允许输入")
    private String rateVar1;

    @ApiModelProperty(value = "基准利率,根据贷款货币、参考利率类型、参考利率档期自动带出对应的利率，不允许修改")
    private String intRate1;

    @NotBlank
    @ApiModelProperty(value = "成本利率")
    private String costOfFund;

    @NotBlank
    @ApiModelProperty(value = "浮动方式,默认0,\"0\",\"Not Float\"；\"1\",\"On Rate\"；\"2\",\"Percentage Spread\"\n")
    private String floatNMth;

    @ApiModelProperty(value = "百分比差,当浮动方式选2时必输，否则不允许输入")
    private String iratNPer;

    @ApiModelProperty(value = "利差,当浮动方式选0时不允许输入；当浮动方式选1时必输；当浮动方式选2时根据百分比差乘以基准利率自动算出利差，不允许修改")
    private String addOnRate;

    @NotBlank
    @ApiModelProperty(value = "贷款合约利率，根据成本利率加上利差自动算出合约利率，不允许修改")
    private String allInRate;

    @NotNull
    @ApiModelProperty(value = "逾期参考利率类型，默认F")
    private OverdueRateTypeEnum ovdKnd;

    @NotBlank
    @ApiModelProperty(value = "逾期利差类别，默认0,\"0\",\"Not Float\"；\"1\",\"On Rate\"；\"2\",\"Percentage Spread\"\n")
    private String floatOMth;

    @ApiModelProperty(value = "逾期利差百分比，当逾期利差类别选2时必输，否则不允许输入")
    private String iratOPer;

    @ApiModelProperty(value = "逾期利率，当逾期利差类别选0时必输，否则根据贷款合约利率加上逾期利差自动算出逾期利率，不允许修改")
    private String effRat;

    @ApiModelProperty(value = "逾期利差，当逾期利差类别选0时不允许输入；当逾期利差类别选1时必输；当逾期利差类别选2时根据逾期利差百分比乘以贷款合约利率自动算出逾期利差，不允许修改")
    private String difIratPnt;

    @NotBlank
    @ApiModelProperty(value = "放款结算方式，默认1,\"1\",\"DD ACCOUNT\"；\"2\",\"SUSPENSE ACCOUNT\"；\"3\",\"NOSTRO ACCOUNT\"\n")
    private String payStlmth;

    @ApiModelProperty(value = "放款活期账户，当付款结算方式选1时必输，否则不允许输入")
    private String payDdac;

    @ApiModelProperty(value = "放款同业账户，当付款结算方式选2时必输，否则不允许输入")
    private String payNosac;

    @ApiModelProperty(value = "放款SUSP账户，当付款结算方式选3时必输，否则不允许输入")
    private String paySusac;

    @NotBlank
    @ApiModelProperty(value = "放款货币，与贷款货币保持一致")
    private String payCcy;

    @ApiModelProperty(value = "还款结算方式,\"1\",\"DD ACCOUNT\"；\"2\",\"SUSPENSE ACCOUNT\"；\"3\",\"NOSTRO ACCOUNT\"\n")
    private String recStlmth;

    @ApiModelProperty(value = "还款活期账户，当收款结算方式选1时必输，否则不允许输入")
    private String recDdac;

    @ApiModelProperty(value = "还款同业账户，当收款结算方式选2时必输，否则不允许输入")
    private String recNosac;

    @ApiModelProperty(value = "还款SUSP账户，当收款结算方式选3时必输，否则不允许输入")
    private String recSusac;

    @ApiModelProperty(value = "还款货币，与贷款货币保持一致")
    private String recCcy;

    @NotNull
    @ApiModelProperty(value = "贷款还款顺序")
    private LoanRepayOrderEnum repySqCd1;

    @NotBlank
    @ApiModelProperty(value = "还款方式,\"1\",\"PAY INTERST WITH PRINCIPAL\"；\"2\",\"P at maturity + Int by term\"；\"3\",\"PAY PRIN AND INT BY TERM\"\n")
    private String repType;

    @NotBlank
    @ApiModelProperty(value = "利息基准天数,\"1\",\"360 DAYS\"；\"2\",\"365 DAYS\"；\"3\",\"366 DAYS\"；\"4\",\"30\"；\"5\",\"30E\"\n")
    private String intDayBasis;

    @ApiModelProperty(value = "结息周期，当还款方式选1时不允许输入，否则必输")
    private String setPerd;

    @ApiModelProperty(value = "结息周期单位，当还款方式选1时不允许输入，否则必输")
    private String setUnit;

    @ApiModelProperty(value = "还款指定日，当还款方式选1时不允许输入，否则必输")
    private String repDay;

    @ApiModelProperty(value = "首次还息日期，当还款方式选4时必输，否则不允许输入")
    private String intPerEnd;

    @ApiModelProperty(value = "贷款宽限期")
    private String graceDt;

    @ApiModelProperty(value = "宽限期处理方式")
    private String graType;

}
